package base

import (
	"github.com/labstack/echo"
	"log"
)

type Paging struct {
	Keyword  string `json:"keyword"`
	Sort     string `json:"sort"`
	PageNum  int    `json:"pageNum"`
	PageSize int    `json:"pageSize"`
	Seq      int    `json:"seq"` // 每次刷新列表时重置,用来记录每次推荐的内容
}

func BindPaging(c echo.Context) (pag Paging, err error) {
	if _err := c.Bind(&pag); _err != nil {
		log.Println("BindPaging", _err)
		err = Wrap(ErrBadParam, "解析参数失败")
	}
	return
}

func (p *Paging) Size() int {
	if p.PageSize == 0 {
		p.PageSize = 20
	}
	return p.PageSize
}

func (p *Paging) Offset() int {
	if p.PageNum == 0 {
		p.PageNum = 1
	}
	return p.Size() * (p.PageNum - 1)
}

type ListResult struct {
	Paging
	List  any   `json:"list"`
	Total int64 `json:"total"`
}

func (p Paging) Result(data any, total int64) ListResult {
	return ListResult{
		Paging: p,
		List:   data,
		Total:  total,
	}
}
